package com.hopu.service.MySort;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hopu.entity.MySort;
import com.hopu.mapper.MySortMapper;
import com.hopu.util.HouseResult;
import com.hopu.util.StaticData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Package: com.hopu.service
 * @ClassName: MySortServiceImple
 * @Author: xiaoBao
 * @CreateTime: 2020/11/4 3:52
 * @Description: 【房屋类型功能服务层接口实现类】
 */
@Service("mySortServiceImple")
public class MySortServiceImple implements MySortService{
    @Autowired  /**自动装载MySortMapper动态接口（持久层）*/
    private MySortMapper mySortMapper;


    /**
     * findAllSort 【查询所有房屋类型信息】
     * 1、实现查询所有房屋类型信息显示到房屋类型列表中；2、在“房屋资料”页面点击“添加按钮”时实现“房屋类型”下拉框的数据回显。
     * @param current 当前页；
     * @return 将分页后的房屋类型信息返回给表现层。
     */
    @Override
    public HouseResult<PageInfo<MySort>> findAllSort(Integer current) {
        //判断如果current的值不为空，则表示这是一个“分页显示所有房屋类型名称”到房屋类型列表中的请求；
        if(current != null){
            /**使用分页技术*/
            //1、使用startPage方法：参数1：配置 “分页的初始页”；参数2：“当前页要显示的信息行数”；
            PageHelper.startPage(current, StaticData.DEFAULT_PAGE_SIZE);

            //2、调用持久层操作：查询所有房屋类型信息，返回一个List集合；
            List<MySort> sortList = mySortMapper.findAllSort();

            //3、实例化PageInfo对象，将房屋类型信息集合进行分页；
            PageInfo<MySort> allSortInfo = new PageInfo<>(sortList);

            //如果集合的大小不为0
            if(sortList.size() != 0){
                //则将分页后的员工信息返回给表现层
                return new HouseResult<>(0,"房屋类型信息查询成功",allSortInfo);
            }else {
                return new HouseResult<>(1,"房屋类型信息查询失败",allSortInfo);
            }
        }else
        //如果current为空，则表示这是一个“查询所有房屋类型名称”进行房屋资料添加列表“房屋类型”下拉框数据回显的请求；
            {
                //执行持久层操作：查询所有房屋类型名称，返回一个List集合；
                List<MySort> allSortName = mySortMapper.findAllSort();

                //将查询到的所有房屋类型名称返回给表现层；
                return new HouseResult(0,"查询房屋类型名称成功",allSortName);
            }
    }


    /**
     * findSortByNameOrId 【根据名称或Id查询一条房屋类型信息】
     *  1、添加房屋类型时验证房屋类型是否存在；2、实现修改房屋类型弹窗数据回显；
     * @param mySort 房屋类型名称 或 Id；
     * @return 将查询结果返回给表现层。
     */
    @Override
    public HouseResult<MySort> findSortByNameOrId(MySort mySort) {
        //执行持久层操作：根据名称或Id查询一条房屋类型信息（1、验证房屋类型是否存在；2、实现修改弹窗数据回显）
        MySort sorts = mySortMapper.findSortByNameOrId(mySort);

        //判断查询返回的数据是否为空
        if(sorts == null){
            return new HouseResult<>(1,"房屋类型信息不存在",sorts);
        }else {
            return new HouseResult<>(0,"房屋类型信息已存在",sorts);
        }
    }


    /**
     * addSort 【添加一条房屋类型信息】
     * @param mySort 房屋类型名；
     * @return 将执行结果返回给表现层。
     */
    @Override
    public HouseResult<Object> addSort(MySort mySort) {
        //执行持久层操作：添加一条房屋类型信息
        Integer successResult = mySortMapper.addSort(mySort);

        //如果执行结果影响的行数不为0，则表示添加成功；
        if(successResult != 0){
            return new HouseResult<>(0,"房屋类型信息添加成功",successResult);
        }else {
            return new HouseResult<>(1,"房屋类型信息添加失败",successResult);
        }
    }


    /**
     * uppSortById 【根据Id修改一条房屋类型信息】
     * @param mySort 房屋类型名、Id；
     * @return 将判断后的执行结果返回给表现层。
     */
    @Override
    public HouseResult<Object> uppSortById(MySort mySort) {
        //执行持久层操作：添加一条房屋类型信息
        Integer successResult = mySortMapper.uppSortById(mySort);

        //如果执行结果影响的行数不为0，则表示添加成功；
        if(successResult != 0){
            return new HouseResult<>(0,"房屋类型信息修改成功",successResult);
        }else {
            return new HouseResult<>(1,"房屋类型信息修改失败",successResult);
        }
    }
}
